<?php

namespace Api\Service;

use Wx\Api\Wechat;

/**
 * 微信接口具体实现操作
 * 
 * @author zoujingli <zoujingli@qq.com>
 * @date 2014/07/26 11:30
 */
class WechatService extends Controller {

    /**
     * 接口数据ID
     * @var type 
     */
    protected $appid = null;

    /**
     * 接口操作对象
     * @var type 
     */
    protected $wechat    = null;
    protected $wechat_id = null;

    /**
     * 微信接口初始化方法
     */
    public function __construct($appid) {
        parent::__construct();
        /* 数据库查询微信配置项 */
        $config          = M('WechatConfig')->where(array('appid' => $appid))->find();
        $this->wechat    = new Wechat($config);
        $this->wechat_id = $appid;
        /* 验证接口 */
        $this->wechat->valid();
        /* 记录接口日志 */
        $this->_logs();

        /* 消息分类处理 */
        $this->record();
    }

    /**
     * 接口事件分发器
     */
    public function record() {
        /* 分别执行对应类型的操作 */
        switch ($this->wechat->getRev()->getRevType()) {
            case Wechat::MSGTYPE_TEXT:
                $this->_text();
                break;
            case Wechat::MSGTYPE_EVENT:
                $this->_event();
                break;
            case Wechat::MSGTYPE_IMAGE:
                $this->_image();
                break;
            case Wechat::MSGTYPE_LOCATION:
                $this->_location();
                break;
            default:
                $this->_default();
        }
    }

    /**
     * 微信支付V3
     */
    public function wechatPay() {
        /* 数据库查询微信配置项 */
        $config   = M('WechatConfig')->where(array('appid' => $appid))->find();
        $wechat   = new Wechat($config);
        $prepayId = $wechat->getPrepayId($openid, $body, $out_trade_no, $total_fee, $notify_url);
        $pay_json = $wechat->createMchPay($prepayId);
    }

    /**
     * 公众号支付
    wx.ready(function () {
            wx.chooseWXPay({
                timestamp: data.timeStamp, // 支付签名时间戳，注意微信jssdk中的所有使用timestamp字段均为小写。但最新版的支付后台生成签名使用的timeStamp字段名需大写其中的S字符
                nonceStr: data.nonceStr, // 支付签名随机串，不长于 32 位
                package: data.package, // 统一支付接口返回的prepay_id参数值，提交格式如：prepay_id=***）
                signType: data.signType, // 签名方式，默认为'SHA1'，使用新版支付需传入'MD5'
                paySign: data.paySign, // 支付签名
                success: function (res) {
                    window.doing = false;
                    // 支付成功后的回调函数
                    top.location = "{:U('Shop/MyOrder/index')}";
                }
            });
        });
    });  
     */
    

    /**
     * 支付回调通知
     * 注：回调地址要放在无权限控制的url中
     */
    public function notify() {
        header('Content-Type:text/xml; charset=utf-8');
        $postStr    = file_get_contents("php://input");
        $notifyInfo = (array) simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
        if ($notifyInfo['result_code'] == 'SUCCESS' && $notifyInfo['return_code'] == 'SUCCESS') {
            // Todo:支付成功的订单详细记录数据库
            
            $return = array();
            $return['return_code'] = 'SUCCESS';
            $return['return_msg']  = '';
            exit(xml_encode($return));
        }
    }

}
